home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / wnos5src.zip / IFACE.H < prev    next >
Text File  |  1993-08-09  |  4KB  |  132 lines

  1. #ifndef    _IFACE_H
  2. #define    _IFACE_H
  3.  
  4. #ifndef    _GLOBAL_H
  5. #include "global.h"
  6. #endif
  7.  
  8. #ifndef    _MBUF_H
  9. #include "mbuf.h"
  10. #endif
  11.  
  12. #ifndef _PROC_H
  13. #include "proc.h"
  14. #endif
  15.  
  16. struct flags {
  17.     int16 maxframe;
  18.     int16 t1init;
  19.     int16 t2init;
  20.     int16 t3init;
  21.     int16 t4init;
  22.     int16 t5init;
  23.     int16 retries;
  24.     int16 axwindow;
  25.     int16 paclen;
  26.     int16 pthresh;
  27.     int16 digipeat;
  28.     int16 t3disc;
  29. };
  30.  
  31. /* Interface control structure */
  32. struct iface {
  33.     struct iface *next;        /* Linked list pointer */
  34.     char *name;                /* Ascii string with interface name */
  35.     int type;                /* Link header type for phdr */
  36.     struct iftype *iftype;    /* Pointer to appropriate iftype entry */
  37.     int32 addr;                /* IP address */
  38.     int32 broadcast;        /* Broadcast address */
  39.     int32 netmask;            /* Network mask */
  40.  
  41.     int32 (*ioctl) __ARGS((struct iface *, int, int, int32));
  42.                 /* Encapsulate an IP datagram */
  43.     int (*send) __ARGS((struct mbuf *,struct iface *,int32,int,int,int,int));
  44.                 /* Encapsulate any link packet */
  45.     int (*output) __ARGS((struct iface *,char *,char *,int16,struct mbuf *));
  46.                 /* Send raw packet */
  47.     int (*raw) __ARGS((struct iface *,struct mbuf *));
  48.                 /* Call before detaching */
  49.     int (*stop) __ARGS((struct iface *,int));
  50.                 /* Display status */
  51.     int (*status) __ARGS((struct iface *));
  52.  
  53.     int16 mtu;                /* Maximum transmission unit size */
  54.     int dev;                /* Subdevice number to pass to send */
  55.     int xdev;                /* Associated Slip or Nrs channel, if any */
  56.     int port;                /* KISS-subaddr for multiport */
  57.     int16 trace;                /* Trace flags */
  58. #define    IF_TRACE_OUT    0x01    /* Output packets */
  59. #define    IF_TRACE_IN        0x10    /* Packets to me except broadcast */
  60. #define    IF_TRACE_ASCII    0x100    /* Dump packets in ascii */
  61. #define    IF_TRACE_HEX    0x200    /* Dump packets in hex/ascii */
  62. #define    IF_TRACE_NOBC    0x1000    /* Suppress broadcasts */
  63. #define IF_TRACE_RAW    0x2000    /* Raw packet dump */
  64.     char *trfile;            /* Trace file name, if any */
  65.     FILE *trfp;                /* Stream to trace to */
  66.     char *hwaddr;            /* Device hardware address, if any */
  67.     struct iface *forw;        /* Forwarding interface for output, if rx only */
  68.     int32 ipsndcnt;            /* IP datagrams sent */
  69.     int32 rawsndcnt;        /* Raw packets sent */
  70.     int32 iprecvcnt;        /* IP datagrams received */
  71.     int32 rawrecvcnt;        /* Raw packets received */
  72.     int32 lastsent;            /* Clock time of last send */
  73.     int32 lastrecv;
  74.     struct proc *proc;        /* Pointer to line process, if any */
  75.     struct proc *proc1;        /* Second line process, if any */
  76.     struct proc *supv;
  77.     void *extension;
  78.     int niface;                /* Iface number for routing tables */
  79.     struct lq *lq;            /* used by heard */
  80.     int Hmax;
  81. #define MAXDEFAULT    20        /* Initial heardtable value */
  82.     int Hcurrent;
  83.     struct flags *flags;    /* flags for AX25 use */
  84. };
  85. #define    NULLIF    (struct iface *)0
  86. extern struct iface *Ifaces;    /* Head of interface list */
  87. extern struct iface Loopback;    /* Optional loopback interface */
  88. extern struct iface Encap;
  89.  
  90. /* Header put on front of each packet in input queue */
  91. struct phdr {
  92.     struct iface *iface;
  93.     unsigned short type;    /* Use pktdrvr "class" values */
  94. };
  95.  
  96. extern char Noipaddr[];
  97. extern char Ifexist[];
  98. extern struct mbuf *Hopper;
  99. extern int Niface;
  100.  
  101. /* Interface encapsulation mode table entry. An array of these strctures
  102.  * are initialized in config.c with all of the information necessary
  103.  * to attach a device.
  104.  */
  105. struct iftype {
  106.     char *name;                /* Name of encapsulation technique */
  107.     int (*send) __ARGS((struct mbuf *,struct iface *,int32,int,int,int,int));
  108.                             /* Routine to send an IP datagram */
  109.     int (*output) __ARGS((struct iface *,char *,char *,int16,struct mbuf *));
  110.                             /* Routine to send link packet */
  111.     char *(*format) __ARGS((char *,char *));
  112.                             /* Function that formats addresses */
  113.     int (*scan) __ARGS((char *,char *));
  114.                             /* Reverse of format */
  115.     int type;                /* Type field for network process */
  116.     int hwalen;                /* Length of hardware address, if any */
  117. };
  118. #define    NULLIFT    (struct iftype *)0
  119. extern struct iftype Iftypes[];
  120.  
  121. /* In iface.c: */
  122. void init_flags __ARGS((struct iface *ifp));
  123. struct iface *if_lookup __ARGS((char *name));
  124. struct iface *ismyaddr __ARGS((int32 addr));
  125. int if_detach __ARGS((struct iface *ifp));
  126. int setencap __ARGS((struct iface *ifp,char *mode));
  127. char *if_name __ARGS((struct iface *ifp,char *comment));
  128. int bitbucket __ARGS((struct iface *ifp,struct mbuf *bp));
  129. struct iface *cmp_if __ARGS((char *ifname));
  130.  
  131. #endif    /* _IFACE_H */
  132.